Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Native POSIX Thread Library</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Native_POSIX_Thread_Library"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Native_POSIX_Thread_Library rootpage-Native_POSIX_Thread_Library skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Native POSIX Thread Library</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Die <b>Native POSIX Thread Library</b> (<b>NPTL</b>) ist eine moderne Implementierung einer <a href="Thread_(Informatik)" title="Thread (Informatik)">Threading</a>-<a href="Programmbibliothek" title="Programmbibliothek">Bibliothek</a> für das Betriebssystem <a href="Linux" title="Linux">Linux</a>. Sie wird in Verbindung mit der <a href="Glibc" class="mw-redirect" title="Glibc">GNU C Library</a> (glibc) verwendet und erlaubt Linux-Programmen die Verwendung von <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Threads (pthreads).
</p>
<div class="mw-heading mw-heading2"><h2 id="Geschichte">Geschichte</h2></div>
<p>Seit der Kernel-Version 2.0 existierte für Linux die Threading-Bibliothek <i>LinuxThreads</i>, deren grundlegende Design-Prinzipien unter Einfluss der 1996 vorhandenen Beschränkungen des <a href="Linux_(Kernel)" title="Linux (Kernel)">Linux-Kernels</a> und der libc5 zustande gekommen waren. Linux hatte keine echte Unterstützung für Threads im Kernel, kannte aber den <i>clone()</i>-Systemaufruf, der eine Kopie des aufrufenden Prozesses mit identischem Adressraum erzeugte. LinuxThreads benutzte diesen <a href="Systemaufruf" title="Systemaufruf">Systemaufruf</a>, um Thread-Unterstützung im <a href="Ring_(CPU)" class="mw-redirect" title="Ring (CPU)">Userspace</a> zu simulieren. Die Bibliothek wurde zwar kontinuierlich verbessert, war aber konzeptionell veraltet und eingeschränkt.
</p><p>Folgende Probleme mit der existierenden <i>LinuxThreads</i>-Implementation wurden identifiziert:
</p>
<ul><li>Sie benötigt einen Manager-Thread im Prozess, der weitere Threads erzeugt, wieder aufräumt und die <a href="Signal_(Unix)" title="Signal (Unix)">Signalbehandlung</a> kanalisiert.</li>
<li>Sie ist nicht <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-konform, da es zum Beispiel nicht möglich ist, ein Signal an den ganzen Prozess zu senden, bzw. der Kernel dafür sorgen muss, dass Signale wie SIGSTOP und SIGCONT an alle Threads im Prozess durchgereicht werden.</li>
<li>Unter Last wird die <a href="Leistung_(Informatik)" class="mw-redirect" title="Leistung (Informatik)">Performance</a> schlecht, da das Signalsystem zur <a href="Prozesssynchronisation" title="Prozesssynchronisation">Synchronisierung</a> verwendet wird. Dies beeinträchtigt auch die <a href="Gleichgewicht_(Systemtheorie)#stabil" title="Gleichgewicht (Systemtheorie)">Stabilität</a>.</li>
<li>Jeder Thread führt fälschlicherweise eine eigene <a href="Prozess_ID" class="mw-redirect" title="Prozess ID">Prozess ID</a>.</li>
<li>Auf der wichtigen <a href="IA-32" title="IA-32">IA-32</a>-Architektur waren nur maximal 8192 Threads möglich.</li></ul>
<p>Um die bestehenden Probleme zu lösen, wurden zusätzliche Infrastruktur im Kernel und eine neu geschriebene Threading-Bibliothek benötigt. Es wurden zwei konkurrierende Projekte gestartet: Next Generation POSIX Threads (NGPT) unter Leitung von <a href="IBM" title="IBM">IBM</a> und NPTL unter Federführung der bei <a href="Red_Hat" title="Red Hat">Red Hat</a> angestellten Kernel- und glibc-Programmierer <a href="Ingo_Moln%C3%A1r" title="Ingo Molnár">Ingo Molnár</a> und <a href="Ulrich_Drepper" title="Ulrich Drepper">Ulrich Drepper</a>. Weil sich abzeichnete, dass sich in der Praxis die NPTL durchsetzen würde, wurde das NGPT-Projekt Mitte 2003 eingestellt.
</p><p>Das NPTL-Team setzte sich folgende Ziele für seine neue Bibliothek:
</p>
<ul><li>POSIX-Konformität, um Userspace-<a href="Quelltext" title="Quelltext">Quelltext</a> besser portierbar zu machen</li>
<li>effektive Verwendung von <a href="Symmetrisches_Multiprozessorsystem" title="Symmetrisches Multiprozessorsystem">SMP</a> und gute <a href="Skalierbarkeit" title="Skalierbarkeit">Skalierbarkeit</a>, um die Leistungsfähigkeit auf Mehrprozessorsystemen zu steigern
<ul><li>darauf aufbauend: <a href="NUMA" class="mw-redirect" title="NUMA">NUMA</a>-Unterstützung</li></ul></li>
<li>wenig Erzeugungsaufwand pro Thread</li>
<li><a href="Kompatibilit%C3%A4t_(Technik)" title="Kompatibilität (Technik)">Kompatibilität</a> mit <i>LinuxThreads</i>, das heißt, alte Programme sollten ohne Neukompilierung mit der NPTL laufen.</li></ul>
<p>Unter diesen Voraussetzungen begann Mitte 2002 die Arbeit an der neuen Native POSIX Thread Library. Im August/September 2002 wurde der Linux-Kernel 2.5 für die NPTL vorbereitet. Dazu war es notwendig, einige neue Systemaufrufe einzuführen und vorhandene zu optimieren. In ersten Benchmarks konnten nun auf einem IA-32-System innerhalb von 2 Sekunden 100.000 parallele Threads erzeugt werden; ohne NPTL dauerte allein die Erzeugung der Threads fast 15 Minuten. Trotz dieser Last blieb das Testsystem mit annähernd gleicher Geschwindigkeit benutzbar.
</p><p><a href="Red_Hat_Linux" title="Red Hat Linux">Red Hat Linux</a> 9 war die erste <a href="Linux-Distribution" title="Linux-Distribution">Linux-Distribution</a>, in der die NPTL in einem <a href="Patch_(Software)" title="Patch (Software)">gepatchten</a> 2.4er-Kernel verwendet wurde (und deren Benutzer dadurch bisweilen zu unfreiwilligen <a href="Entwicklungsstadium_(Software)#Beta-Version" title="Entwicklungsstadium (Software)">Betatestern</a> wurden). Inzwischen benutzen alle modernen Distributionen die NPTL, wenn sie einen Kernel der Version 2.6 oder höher verwenden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Konzept">Konzept</h2></div>
<p>NPTL funktioniert ähnlich wie <i>LinuxThreads</i>. Der Kernel verwaltet immer noch Prozesse und keine Threads, und neue Threads werden mit einem von der NPTL aufgerufenen <code>clone()</code> erzeugt. Die NPTL benötigt allerdings spezielle Kernelunterstützung und implementiert damit Synchronisationsmechanismen, bei denen Threads schlafen gelegt und wieder aufgeweckt werden. Dazu werden <a href="Futex" title="Futex">Futexes</a> verwendet.
</p><p>Die NPTL ist eine sogenannte 1:1-Threading-Bibliothek. Die vom Benutzer mit der <code>pthread_create()</code>-Funktion erzeugten Threads stehen dabei in einer 1-zu-1-Beziehung mit Prozessen in den Scheduler-Queues des Kernels. Dies ist die einfachste denkbare Threading-Implementierung. Die Alternative wäre m:n. Dabei existieren typischerweise mehr Threads im Userspace, als es Prozesse im Kernel gibt. Die Threading-Bibliothek wäre dann dafür verantwortlich, die <a href="Prozessorzeit" title="Prozessorzeit">Prozessorzeit</a> auf die einzelnen Threads im Prozess zu verteilen. Mit diesem Konzept wären sehr schnelle <a href="Kontextwechsel" title="Kontextwechsel">Kontextwechsel</a> möglich, da die Anzahl der notwendigen Systemaufrufe minimiert wird, andererseits würde aber die Komplexität erhöht, und es könnte leichter zu <a href="Priorit%C3%A4tsinversion" title="Prioritätsinversion">Prioritätsinversion</a> kommen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://static.redhat.com/legacy/whitepapers/developer/POSIX_Linux_Threading.pdf">The Native POSIX Thread Library for Linux</a> (PDF; 535&nbsp;kB)</li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-07-21" href="https://de.wikipedia.org/wiki/?title=Native_POSIX_Thread_Library&amp;oldid=258105957">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>